/*
 * @Descripttion:
 * @version:
 * @Author: ChenXiang
 * @Date: 2021-07-10 19:27:51
 * @LastEditors: ChenXiang
 * @LastEditTime: 2021-09-30 17:29:23
 */
module.exports = {
  preset: "ts-jest",
  // roots是用于指定 Jest 的根目录的，Jest 只会检测在根目录下的测试用例并运行
  roots: ["<rootDir>/src"],

  testPathIgnorePatterns: [
    //如果文件路径与任何模式匹配，则将跳过覆盖率信息。
    "node_modules",
  ],

  globals: {
    "ts-jest": {
      isolatedModules: true,
    },
  },
  setupFilesAfterEnv: ["<rootDir>/config/jest/setuptests.ts"],
  testEnvironment: "jsdom", //测试环境，默认值是：jsdom，可修改为node
  // 运行测试前准备文件: 引入 polyfill 解决 jsdom 的兼容性问题
  // setupFiles: ['react-app-polyfill/jsdom'],
  // setupFiles: ['<rootDir>/config/jest/setup.ts'],
  // test 匹配项: 在 __tests__ 文件夹下的所有 js jsx ts tsx 和以 spec test 为中间名的 js jsx ts tsx
  testMatch: [
    "<rootDir>/src/__tests__/**/*.{spec,test}.{js,jsx,ts,tsx}",
    "<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}",
  ],

  // 创建测试运行环境: 在 node 环境下模拟浏览器环境
  // testEnvironment: 'jest-environment-jsdom-fourteen',
  // 指定转换器: js jsx ts tsx 使用 babel-jest 进行转换 css 使用 cssTransform.js 进行转换 其他文件使用 fileTransform.js
  transform: {
    "^.+\\.(js|jsx)$": "<rootDir>/node_modules/babel-jest",
    ".*\\.(css|less|scss)$": "<rootDir>/config/jest/cssTransform.js",
  },

  // 转化器忽略文件: node_modules 目录下的所有 js jsx ts tsx cssModule 中的所有 css sass scss
  transformIgnorePatterns: [
    "[/\\\\]node_modules[/\\\\].+\\.(js|jsx|ts|tsx)$",
    "^.+\\.module\\.(css|sass|scss)$",
  ],
  // 引入模块的路径: 默认 node_modules 可配置额外路径
  modulePaths: [],
  // 指定模块映射处理模块
  moduleNameMapper: {
    //相当于webpack里的alias
    "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$":
      "<rootDir>/__tests__/mocks/file-mock.js",
    "\\.(css|sass|scss)$": "identity-obj-proxy",

    '^@/(.*)$': '<rootDir>/src/$1',
    // '^@api$': '<rootDir>/src/api',
    // '@utils/(.*)$': '<rootDir>/src/utils',
    // '@img/(.*)$': '<rootDir>/src/assets/images',
    // '@hooks/(.*)$': '<rootDir>/src/utils/hooks',
    // '@components/(.*)$': '<rootDir>/src/components',
    // '@style/(.*)$': '<rootDir>/src/style',
    // '^@redux/(.*)$': '<rootDir>/src/redux/$1',
  },
  // 自动查找后缀名
  moduleFileExtensions: [
    "web.js",
    "js",
    "web.ts",
    "ts",
    "web.tsx",
    "tsx",
    "json",
    "web.jsx",
    "jsx",
    "node",
  ],
  // watchPlugins: [
  //   //在每个测试文件运行前，Jest会先运行这里的配置文件来初始化指定的测试环境
  //   'jest-watch-typeahead/filename',
  //   'jest-watch-typeahead/testname',
  // ],

  // 测试代码覆盖率
  collectCoverage: true, //是否收集测试时的覆盖率信息

  // 测试覆盖率收集范围: src 下所有的 js jsx ts tsx
  collectCoverageFrom: [
    // 测试报告想要覆盖那些文件，目录，前面加！是避开这些文件
    "src/**/*.{js,jsx,ts,tsx}",
    "!src/**/*.d.ts",
    "!**/node_modules/**",
    "!**/static/**",
  ],
  coveragePathIgnorePatterns: [
    //排除出coverage的文件列表， 这些pattern string默认匹配全路径
    "node_modules",
    "mocks/.*.{js,jsx,ts,tsx}",
  ],
  moduleDirectories: ["node_modules", "src"],
};
